
#include <stdio.h>

void process(int n) {
    int matrix[n][n];
    // 首先定义四个变量，分别代表矩阵的上下左右四个边界
    int top = 0;
    int bottom = n - 1;
    int left = 0;
    int right = n - 1;

    int value = 1;
    while(value <= n*n){
        for(int i = left; i <= right; i++) {
        	matrix[top][i] = value; // 从左到右，行不变，列变化
        	value++;
        }
        top++; // 上边界向下移动一行
        for(int i = top; i <= bottom; i++) {
        	matrix[i][right] = value; // 从上到下，列不变，行变化
        	value++;
        }
        right--; // 右边界向左移动一列
        for(int i = right; i >= left ; i--) {
        	matrix[bottom][i] = value; // 从右到左，行不变，列变化
        	value++;
        }
        bottom--; // 下边界向上移动一行
        for(int i = bottom; i >= top; i--) {
        	matrix[i][left] = value; // 从下到上，列不变，行变化
        	value++;
        }
        left++; // 左边界向右移动一列
    }
    // matrix[0][0]=1 matrix[0][1]=2 matrix[0][2]=3 matrix[0][3]=4 
    // matrix[1][0]=12 matrix[1][1]=13 matrix[1][2]=14 matrix[1][3]=5 
    // matrix[2][0]=11 matrix[2][1]=16 matrix[2][2]=15 matrix[2][3]=6 
    // matrix[3][0]=10 matrix[3][1]=9 matrix[3][2]=8 matrix[3][3]=7 
    // 以上就是n=4时的内容

    // 上面的代码已经把二维数组填充完成了，下面打印二维数组
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("%3d ", matrix[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int n;
    printf("please input num:");
    scanf("%d", &n);
    process(n);
    return 0;
}


